package com.own.business.system.user.business.service;

import com.own.business.system.user.entity.bo.SystemUserInfoBo;
import com.own.business.system.user.entity.map.SystemUserInfoMapVo;
import com.own.business.system.user.entity.po.SystemUserInfo;
import com.own.business.system.user.entity.query.SystemUserInfoQuery;
import com.own.business.system.user.entity.vo.SystemUserInfoVo;
import com.own.component.common.base.service.BaseService;

import java.util.Collection;
import java.util.List;

/**
 * SystemUserInfoService
 *
 * @author chenxueli
 * @date 2021/06/24 15:46:54
 */
public interface SystemUserInfoService extends BaseService<
        SystemUserInfo,
        SystemUserInfoBo,
        SystemUserInfoVo,
        SystemUserInfoMapVo,
        SystemUserInfoQuery
        > {

    /**
     * 根据邮箱获取用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    SystemUserInfo getByEmail(String email);

    /**
     * 根据手机号获取用户信息
     *
     * @param phone 手机号
     * @return 用户信息
     */
    SystemUserInfo getByPhone(String phone);

    /**
     * 根据用户名称获取用户信息
     *
     * @param name 用户名称
     * @return 用户信息
     */
    SystemUserInfo getByName(String name);

    /**
     * 根据用户id获取用户信息
     *
     * @param userId 用户id
     * @return 用户信息
     */
    SystemUserInfo getByUserId(Long userId);

    /**
     * 根据用户id获取用户手机号信息
     *
     * @param userId 用户id
     * @return 用户手机号
     */
    String getPhoneByUserId(Long userId);

    /**
     * 修改头像
     *
     * @param userId 用户id
     * @param avatar 头像地址
     */
    void updateAvatar(Long userId, String avatar);

    /**
     * 修改手机号
     *
     * @param userId 用户id
     * @param phone  手机号
     */
    void updatePhone(Long userId, String phone);

    /**
     * 修改昵称
     *
     * @param userId 用户id
     * @param name   昵称
     */
    void updateName(Long userId, String name);

    /**
     * 修改邮箱
     *
     * @param userId 用户id
     * @param email  邮箱
     */
    void updateEmail(Long userId, String email);

    /**
     * 清除用户名称缓存
     *
     * @param userId 用户id
     */
    void clearUserNameCache(Long userId);

    /**
     * 根据用户ids查询信息
     *
     * @param userIdList 用户id列表
     * @return 用户信息列表
     */
    List<SystemUserInfo> listByUserIdList(Collection<Long> userIdList);

}
